home *** CD-ROM | disk | FTP | other *** search
/ LOGIC Apps / Logic-APPLE_II_APPS.iso / pc / LOGIC Apple II 5.25" Library - DOS Part 3 / DOS073.dsk / FOURIER TRANSFORM HIRES.bas < prev    next >
BASIC Source File  |  2012-02-16  |  3KB  |  130 lines

  1. 0  PRINT "HI-RES FAST FOURIER TRANSFORM"
  2. 1  PRINT "    BY  BILL JACOBS"
  3. 2  PRINT " BASED ON AN ARTICLE BY W. WAGGENER EDN OCT.5 1978"
  4. 3  PRINT "WILL RUN THE FORWARD IE. TIME TO FREQ. OR INVERSE IE. FREQ. TO TIME"
  5. 5  PRINT "ENTER 0 FOR FORWARD OR 1 FOR INVERSE"
  6. 6  INPUT D
  7. 10  DIM X(1025,2),R(202),PH(202)
  8. 20  INPUT "ENTER M WHERE NO. OF POINTS=2^M ";M
  9. 30 N = 2 ^M
  10. 31  PRINT "DO YOU WISH TO ENTER DATA IN TABULAR FORM (0) OR ANALYTIC (1)?"
  11. 32  INPUT S
  12. 33  IF S = 1 GOTO 200
  13. 35  PRINT "INPUT DATA ARRAY"
  14. 40  FOR I = 1 TO N
  15. 44  PRINT "POINT ";I
  16. 45  INPUT X(I,0)
  17. 50  NEXT I
  18. 55  PRINT "THE DATA ARRAY IS"
  19. 60  FOR I = 1 TO N
  20. 70  PRINT I,X(I,0)
  21. 80  NEXT I
  22. 90  PRINT "CALCULATION IN PROGRESS"
  23. 110  GOSUB 550
  24. 112  PRINT "USE PDL(0) TO CONTROL THE LISTING"
  25. 113  PRINT "PRESS SPACE TO PRINT TABLE"
  26. 114  WAIT  -16384,128
  27. 115  PRINT "THE TRANSFORMED DATA IS"
  28. 116  PRINT "#    REAL       IMAG."
  29. 118 Q = N/2.56
  30. 120  FOR I = 1 TO N
  31. 122  FOR Y = 1 TO  PDL(0) *10: NEXT Y
  32. 130  PRINT I -1;" ";X(I,0);"      ";X(I,1)
  33. 135  NEXT I
  34. 139  INPUT "DO YOU WISH A PLOT?";A$
  35. 141  IF A$ = "N" GOTO 5000
  36. 142  PRINT "THE PLOT IS OF THE MAGNITUDE (NORMALIZED) IN SOLID AND THE PHASE"
  37. 143  PRINT "THE PHASE IS ON A GRID OF THREE LINES THE TOP IS +180 DEG. THE MID IS 0 DEG. THE THIRD IS -180 DEG."
  38. 144  PRINT "PRESS SPACE TO CONTINUE"
  39. 145  WAIT  -16384,128
  40. 146  PRINT "CALCULATION IN PROGRESS"
  41. 147 KH = 25/P1
  42. 148  FOR I = 1 TO Q
  43. 151 R(I) =  SQR(X(I,0) *X(I,0) +X(I,1) *X(I,1))
  44. 153  IF R(I) <T GOTO 157
  45. 155 T = R(I)
  46. 157  IF X(I,0) = 0  THEN X(I,0) = 1E -6
  47. 159 PH(I) =  ATN(X(I,1)/X(I,0))
  48. 161  IF X(I,0) > = 0 GOTO 169
  49. 163  IF X(I,1) > = 0  THEN PH(I) = P1 +PH(I): GOTO 169
  50. 167 PH(I) =  -P1 +PH(I)
  51. 169 PH(I) = PH(I) *KH
  52. 171  NEXT I
  53. 173  GOTO 2000
  54. 200  PRINT "USE LINES 210 THRU 400 TO ENTER FUNCTION AS X(I,0) FOR THE REAL PART AND X(I,1) FOR THE IMAGINARY PART"
  55. 202  PRINT "WHEN YOU HAVE COMPLETED YOUR ENTRY TYPE (GOTO 210)TO START THE PROGRAM"
  56. 205  END 
  57. 210  PRINT "CALCULATION IN PROGRESS"
  58. 220  FOR I = 1 TO 2
  59. 230 X(I,0) = 1
  60. 250  NEXT I
  61. 401  GOTO 110
  62. 550 N = 2 ^M
  63. 570 N2 = N/2
  64. 580 N1 = N -1
  65. 590 J = 1
  66. 600  FOR I = 1 TO N1
  67. 610  IF I > = J  THEN 680
  68. 630 T1 = X(J,0)
  69. 640 T2 = X(J,1)
  70. 650 X(J,0) = X(I,0)
  71. 655 X(J,1) = X(I,1)
  72. 660 X(I,0) = T1
  73. 670 X(I,1) = T2
  74. 680 K = N2
  75. 690  IF K > = J  THEN 730
  76. 700 J = J -K
  77. 710 K = K/2
  78. 720  GOTO 690
  79. 730 J = J +K
  80. 740  NEXT I
  81. 760 S1 =  -1
  82. 770  IF D = 0  THEN 790
  83. 780 S1 = 1
  84. 790 P1 = 3.1415926535898
  85. 800  FOR L = 1 TO M
  86. 810 L1 = 2 ^L
  87. 820 L2 = L1/2
  88. 830 U1 = 1
  89. 840 U2 = 0
  90. 850 W1 =  COS(P1/L2)
  91. 860 W2 = S1 * SIN(P1/L2)
  92. 870  FOR J = 1 TO L2
  93. 880  FOR I = J TO N  STEP L1
  94. 890 I1 = I +L2
  95. 900 V1 = (X(I1,0) *U1 -X(I1,1) *U2)
  96. 910 V2 = (X(I1,1) *U1 +X(I1,0) *U2)
  97. 920 X(I1,0) = X(I,0) -V1
  98. 930 X(I1,1) = X(I,1) -V2
  99. 940 X(I,0) = X(I,0) +V1
  100. 950 X(I,1) = X(I,1) +V2
  101. 960  NEXT I
  102. 975 U3 = U1
  103. 976 U4 = U2
  104. 980 U1 = (U3 *W1 -U4 *W2)
  105. 990 U2 = (U4 *W1 +U3 *W2)
  106. 1000  NEXT J
  107. 1010  NEXT L
  108. 1020  IF D = 1  THEN 1060
  109. 1030  FOR I = 1 TO N
  110. 1040 X(I,0) = X(I,0)/N
  111. 1045 X(I,1) = X(I,1)/N
  112. 1050  NEXT I
  113. 1060  RETURN 
  114. 1122  FOR Y = 1 TO  PDL(0) *10: NEXT Y
  115. 2000 Z = 190/T
  116. 2010 C = 279/Q:B = 0
  117. 2020  HGR2 : HCOLOR= 7
  118. 2022  HPLOT 0,0 TO 279,0
  119. 2024  HPLOT 0,25 TO 279,25
  120. 2026  HPLOT 0,50 TO 279,50
  121. 2030  FOR I = 1 TO Q
  122. 2050  FOR S = 1 TO C
  123. 2060  HPLOT B,191 TO B,191 -Z *R(I)
  124. 2135  HCOLOR= 2
  125. 2140  HPLOT B,25 -PH(I)
  126. 2150 B = B +1
  127. 2155  HCOLOR= 7
  128. 2160  NEXT S: NEXT I
  129. 2300  END 
  130. 5000  END